package controller;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.swing.JOptionPane;




import model.Diagrama;
import model.Entidad;
import model.Jerarquia;
import model.Proyecto;

import utils.Mensaje;
import view.Pantalla;
import view.entidad.NuevaJerarquiaDialogo;

public class ManagerJerarquia {
	
	private NuevaJerarquiaDialogo vistaNuevaJerarquia;
	private Pantalla pantalla = Pantalla.getPantalla();
	private Proyecto proyecto;
	private Diagrama diagramaActual;
	private ManagerAreaDeTrabajo controladorAreaDeTrabajo = ManagerAreaDeTrabajo.getInstance();
	private Jerarquia jerarquia;

	
	
	public NuevaJerarquiaDialogo getVistaNuevaJerarquia() {
		return vistaNuevaJerarquia;
	}
	
	public void setVistaNuevaJerarquia(NuevaJerarquiaDialogo vistaNuevaJerarquia, Proyecto proyecto, Diagrama diagramaEnPantalla) {
		this.vistaNuevaJerarquia = vistaNuevaJerarquia;
		this.proyecto = proyecto;
		this.diagramaActual = diagramaEnPantalla;
	}
	
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public List<String> getEntidadesDelDiagrama(){
		
		if (diagramaActual.getListaEntidades()!= null)
		{
			List<String> lista = new ArrayList<String>(); 
			
		    for(String entidad: diagramaActual.getListaEntidades()){
		    	lista.add(entidad);
		    }
		      Collections.sort(lista, new Comparator() {  
	        	  
		            public int compare(Object o1, Object o2) {  
		                String nombre1 = (String) o1;  
		                String nombre2 = (String) o2;  
		                return nombre1.compareToIgnoreCase(nombre2);  
		            }  
		        });  
		
		      return lista;
		}
		else return null;
	}

	
	public void agregarJerarquia(String nombreJerarquia, String entidadGeneral, List<String> entidadesEspecializadas, String coberturaTotal, String coberturaExclusiva) {
		
		boolean existeJerarquia = false;
		
		for(Jerarquia jerarquia : diagramaActual.getListaJerarquia()){
			if(jerarquia.getIdentificator().equals(nombreJerarquia)){
				existeJerarquia = true;
			}
		}
		
		if(existeJerarquia){
			JOptionPane.showMessageDialog(vistaNuevaJerarquia, Mensaje.JERARQUIA_EXISTENTE,Mensaje.MENSAJE_ERROR,
                    JOptionPane.INFORMATION_MESSAGE);
		}else{
			
			String tipoJerarquia = "("+coberturaTotal.substring(0, 1)+","+coberturaExclusiva.substring(0, 1)+")";
			
			
			jerarquia = new Jerarquia(nombreJerarquia, tipoJerarquia, entidadGeneral, entidadesEspecializadas);
			diagramaActual.getListaJerarquia().add(jerarquia);
			
			//ver si hace falta la coordenada para dibujar la jerarquia
			controladorAreaDeTrabajo.dibujarJerarquia(jerarquia);
		}
		
		
		
	}
	
	
	
	
}
